package com.proxy.demo01;

/**
 * <<Java与模式>> 29章 智能引用代理模式
 * 模拟一个股票查询收费网站，收费意味着两件事：1.必须对用户进行身份检查 2.要对用户的使用次数进行统计，以便按照收费标准进行收费。
 * 查询类：根据查询的信息类型的不同，可以扩展，因此定义一个Searcher接口，便于扩展，具体实现类之一为 RealSearcher。
 * 一个没有代理模式知识和应用代理模式经验的设计师往往认为对“用户身份检查”和“查询次数”的记录只要修改一下 RealSearcher对象的方法，
 * 这当然是可以的，只是不够好。因为，导致RealSearcher功能不唯一，而且RealSearcher有可能不止一个方法需要进行权限检查，
 * 校验代码会出现冗余。其次，权限检查和次数统计的责任属于对RealSearcher对象的调用控制，这个责任应当与RealSearcher对象本身分开，
 * 换言之，系统应当为RealSearcher对象提供一个代理对象，由代理对象负责这两项工作。
 * AccessValidator：权限检查
 * UsageLogger：计数器
 *
 */
public class Client {
    private static Searcher searcher;

    public static void main(String[] args) {
        searcher = new Proxy();

        String coin = searcher.doSearch("Admin", "数字货币");

        System.out.println(coin);

    }
}
